2020-2021 Sunseeker Telemetry and Lighting System
ecomp_ex2_interruptVcompVs1.5V.c
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 //******************************************************************************
33 // MSP430FR2311 Demo - ECOMP interrupt capability; Vcompare is compared against
34 // internal 1.5V reference
35 //
36 // Description: Use ECOMP and internal reference to determine if input'Vcompare'
37 // is high of low. For the first time, when Vcompare exceeds the 1.5V internal
38 // reference, CPIFG is set and device enters the ECOMP ISR. In the ISR, CPIES is
39 // toggled such that when Vcompare is less than 1.5V internal reference;
40 // CPIFG is set.
41 // LED(P1.0) which is externally connected to COUT is toggled inside the ECOMP ISR
42 //
43 // MSP430FR2311
44 // ------------------
45 // /|\| |
46 // | | |
47 // --|RST P1.1/C1|<--Vcompare
48 // | |
49 // | P2.0/COUT|----> 'high'(Vcompare>1.5V); 'low'(Vcompare<1.5V)
50 // | | |
51 // | | | LED 'ON'(Vcompare>1.5V); 'OFF'(Vcompare<1.5V)
52 // | |
53 //
54 //******************************************************************************
55 #include "driverlib.h"
56 
57 void main (void)
58 {
59  //Stop WDT
60  WDT_A_hold(WDT_A_BASE);
61 
62  //Set P2.0 as Secondary Module Function Output.(COUT)
63  GPIO_setAsPeripheralModuleFunctionOutputPin(
64  GPIO_PORT_P2,
65  GPIO_PIN0,
66  GPIO_SECONDARY_MODULE_FUNCTION
67  );
68 
69  //Set P1.0 as output pin
70  GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
71 
72  /*
73  * Disable the GPIO power-on default high-impedance mode to activate
74  * previously configured port settings
75  */
76  PMM_unlockLPM5();
77 
78  //Initialize the EComp module
79  /* Base Address of EComp,
80  * Pin C1 to Positive(+) Terminal,
81  * Reference Voltage (from DAC) to Negative(-) Terminal,
82  * Output Filter delay off,
83  * Non-Inverted Output Polarity
84  */
85  EComp_initParam param = {0};
86  param.positiveTerminalInput = ECOMP_INPUT_1;
87  param.negativeTerminalInput = ECOMP_INPUT_DAC;
88  param.outputFilterEnableAndDelayLevel = ECOMP_FILTER_DELAY_OFF;
89  param.invertedOutputPolarity = ECOMP_NORMAL_OUTPUT_POLARITY;
90  EComp_init(ECOMP0_BASE, &param);
91 
92  //Set the reference voltage that is outputed by built-in DAC
93  EComp_configureDACParam dacParam = {0};
94  dacParam.referenceVoltage = ECOMP_DAC_REFERENCE_VOLTAGE_VREF;
95  dacParam.bufferSource = ECOMP_DAC_BUFFER_SOURCE_DUAL_BUFFER_1;
96  dacParam.firstBufferData = 63;
97  EComp_configureDAC(ECOMP0_BASE, &dacParam);
98  EComp_enableDAC(ECOMP0_BASE);
99 
100  //Enable COMP_E Interrupt on default rising edge for CEIFG
101  EComp_setInterruptEdgeDirection(ECOMP0_BASE, ECOMP_OUTPUT_INTERRUPT_RISING_EDGE);
102 
103  // Clear any erroneous interrupts
104  EComp_clearInterrupt(ECOMP0_BASE, ECOMP_OUTPUT_INTERRUPT_FLAG |
105  ECOMP_INVERTED_POLARITY_INTERRUPT_FLAG);
106 
107  //Enable Interrupts
108  /*
109  * Base Address of Comparator E,
110  * Enable COMPE Interrupt on default rising edge for CPIFG
111  */
112  EComp_clearInterrupt(ECOMP0_BASE,
113  ECOMP_OUTPUT_INTERRUPT_FLAG
114  );
115 
116  EComp_enableInterrupt(ECOMP0_BASE,
117  ECOMP_OUTPUT_INTERRUPT
118  );
119 
120  //Allow power to Comparator module
121  EComp_enable(ECOMP0_BASE);
122 
123  //Enter LPM4 with interrupts enabled
124  __bis_SR_register(LPM4_bits + GIE);
125 
126  //For debug
127  __no_operation();
128 }
129 
130 //******************************************************************************
131 //
132 //This is the COMP_E_VECTOR interrupt vector service routine.
133 //
134 //******************************************************************************
135 #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
136 #pragma vector=ECOMP0_VECTOR
137 __interrupt
138 #elif defined(__GNUC__)
139 __attribute__((interrupt(ECOMP0_VECTOR)))
140 #endif
141 void ECOMP_ISR (void)
142 {
143  //Toggle the edge at which an interrupt is generated
144  EComp_toggleInterruptEdgeDirection(ECOMP0_BASE);
145 
146  //Clear Interrupt flag
147  EComp_clearInterrupt(ECOMP0_BASE, ECOMP_OUTPUT_INTERRUPT_FLAG);
148 
149  //Toggle P1.0 output pin
150  GPIO_toggleOutputOnPin(
151  GPIO_PORT_P1,
152  GPIO_PIN0
153  );
154 }
MPU_initThreeSegmentsParam param
void main(void)
void ECOMP_ISR(void)
__no_operation()